/**
 * 进制
 *      二进制：
 *      八进制：0-7，程序中数字前面前面加0表示八进制
 *      十进制：
 *      十六进制：0-9 a~f, eg: #ffffff 程序中数字前面前面加0x表示十六进制
 * */

/**
 * 最大值：Number.MAX_VALUE
 * 最小值：Number.MIN_VALUE
 * 非数字：NaN
*/
console.log('pink' - 100); // NaN
console.log(Number.isNaN(100)); // false -> 如果是数字返回false，反之true

// 方式一
// 使用Number函数
const a = "123"
const c = Number(a);
console.log('c: ' + typeof c);

// 字符串转换为number类型 -> NaN
// 字符串转换为布尔类型 -> true=1 flase=0
// 字符串转换为null -> 数字0
// 字符串转换为underfined -> NaN
const d = "abc"
const e = Number(d);
console.log(e);
console.log('e: ' + typeof e);

// 方式二
// 调用parseInt函数强制转换
// parseInt可以将一个字符串中的所有整数内容取出来，依次从左往右取有效的整数进行转换且抛弃无效的非整数内容
// 调用parseFloat将数值转换为浮点数，依次从左往右取有效的小数
const h = '123';
console.log('h: ' + typeof h);
const j = parseInt(h);
console.log('j: ' + typeof j);

// 可以在parseInt函数指定第二个参数，来强制指定数字的进制
const f = '070';
const g = parseInt(f, 8);
console.log('g: ' + g);
console.log(typeof g);

// 字符串转换为布尔类型 -> NaN

// 浮点数转换为整数, 减少使用Math.floor(), Math.ceil(), Math.round(), 
var { log } = console;
log(~~6.95) // 6
log(6.95 >> 0) // 6
log(6.95 << 0) // 6
log(6.95 | 0) // 6
// 不可以对负数取整
log(6.95 >>> 0) // 6
